Skip to main content

Nest 基础

[100s nestJS]:https://www.youtube.com/watch?v=0M8AYU_hPas

NestJS 是一个属于 NodeJS 的服务端框架,它是对 Express 和 Fastify 上做了一层封装,解决了架构问题。NestJS 提供了 Express 和 Fastify 没有的 MVC 、IOC 、AOP 等架构特性,使得代码更容易维护、扩展。 NestJS 基于 TypeScript 编写并且结合了 OOP(面向对象编程) ,FP(函数式编程) 和 FRP (函数式响应编程) 的相关理念。在设计上的很多灵感来自于 Angular ,Angular 的很多模 式又来自于 Java 中的 Spring 框架, 依赖注入、面向切面编程等,所以我们也可以认为: Nest 是 Node.js 版的 Spring 框架。

  • NestJS 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的开发框架。
    • JS 届的 Spring 框架
    • 支持 TypeScript 语言
    • 构建高效可伸缩
    • 装饰器风格
    • 模块加载采用依赖注入 IOC 方式 (Spring 与 AngularJS)
    • 配套功能齐备(鉴权 文档 微服务 CLI GraphQL)

Express 对比 NestJS​

Alternate text

生成项目​

npm i -g @nestjs/cli
nest new lesson1
目录结构
src
├── app.controller.spec.ts
├── app.controller.ts # 控制器
├── app.module.ts # 模块定义
├── app.service.ts # service层
└── main.ts # 入口

命令​

nest g mo xxx   # 生成 Module
nest g co xxx # 生成 Controller
nest g s xxx # 生成 Service
nest g resource xxx # 生成一套Restful风格接口

核心原理​

MVC 、IOC 、AOP

MVC​

MVC 的全文 是 Model View Controller 。也就是 模型层 ,视图层 ,控制层 。NestJS 它跟 MVVM 架构不一样,MVC 架构下,请求会先发送到控制层 Controller ,再由它调度模型层 Model 的 Service 来完成业务逻辑,NestJS 最后返回对应的视图层 View。 下面是它的逻辑图。

Alternate text

IOC​

  1. IOC 是 Inverse Of Control 的简写。通过 @Controller 、@Injectable 装饰器声明类(class) 就会被 NestJS 扫描,创建对应的对象并添加到一个容器里,这些对象会根据构造器里声明的依赖 “自动注入”,也就是 DI (dependency inject),这就是 IOC 的思想。

  2. IOC 架构的好处就是不需要手动创建对象和根据依赖关系传入不同对象的构造器中,一切都是自动扫描并创建、注入的。

Alternate text

Alternate text

AOP​

AOP 的全文 Aspect Oriented Programming 。也就是面向切面编程。

在 NestJS中,一个请求过来,会经过 Controller 到 Service 再到 Repository 。也就是 MVC 的一个流程。 在进入这个 Controller 之前呢,我们会进行一个 JWT 认证 或者异常处理,日志处理等等。

如果直接在改造 Controller 控制层的代码,这显然很不优雅,可能还会使控制器变得无法控制。

所以在进入控制层 Controller 之前,就进行了一个切面,在进入 Controller 之前做一些处理。

Alternate text

VSCode插件

autoimport